﻿#include "lvgl_power_on.h"
#include "power_on_gif.h"
#include "power_on_gif_01.h"
#include "power_on_gif_02.h"


__lvgl_power_on_data lvgl_power_on_data = {
    .cont_main = NULL,
    .task = NULL,
    .close_task = NULL,
    .close_flag = false,
   .close_count = 0,
   .img_gif1_flash = false,
};


static void lvgl_power_on_anim_out_start(int mode, int time);

void lvgl_power_on_task_cb(lv_task_t* t)
{


}
void lvgl_power_on_close_task_cb(lv_task_t* t)
{
    static uint8_t cnt = 0;
    if (lvgl_power_on_data.close_flag == true)
    {
        if (++cnt >= lvgl_power_on_data.close_count)
        {
            cnt = 0;
            lvgl_power_on_data.close_flag = false;
            lvgl_task_delete(&lvgl_power_on_data.close_task);

            //wifi_init();
            lvgl_power_on_anim_out_start(0, 0);
        }
    }
}


void lvgl_power_on_anim_in_cb(void* arc, lv_anim_value_t v)
{
    lv_obj_set_x(arc, v);
}

void lvgl_power_on_anim_in_ready_cb(lv_anim_t* anim)
{

    lvgl_power_on_debug("---------anim in ready---------");



    lv_obj_set_pos(lvgl_power_on_data.cont_main, 0, 0);

    lvgl_group_add_obj(&lvgl_power_on_data.cont_main);
    lvgl_group_focus_obj(&lvgl_power_on_data.cont_main);

}

void lvgl_power_on_anim_in_start(int mode, int time)
{
#if LVGL_ANIM_SWITCH

    lvgl_power_on_debug("---------anim in start---------");

    lv_anim_path_init(&lvgl_power_on_data.anim_path_in);
    lv_anim_path_set_cb(&lvgl_power_on_data.anim_path_in, lv_anim_path_bounce);
    //lv_anim_path_linear线性动画
    //lv_anim_path_step最后一步更改
    //lv_anim_path_ease_in开头很慢
    //lv_anim_path_ease_out最后慢
    //lv_anim_path_ease_in_out在开始和结束时也很慢
    //lv_anim_path_overshoot超出最终值
    //lv_anim_path_bounce从最终值反弹一点（就像撞墙一样）

    lv_anim_init(&lvgl_power_on_data.anim_in);


    lv_anim_set_exec_cb(&lvgl_power_on_data.anim_in, lvgl_power_on_anim_in_cb);
    lv_anim_set_ready_cb(&lvgl_power_on_data.anim_in, lvgl_power_on_anim_in_ready_cb);
    lv_anim_set_values(&lvgl_power_on_data.anim_in, lv_obj_get_x(lvgl_power_on_data.cont_main), 0);
    lv_anim_set_time(&lvgl_power_on_data.anim_in, 500);
    lv_anim_set_var(&lvgl_power_on_data.anim_in, lvgl_power_on_data.cont_main);

    lv_anim_set_path(&lvgl_power_on_data.anim_in, &lvgl_power_on_data.anim_path_in);
    lv_anim_start(&lvgl_power_on_data.anim_in);
#else
    lvgl_power_on_anim_in_ready_cb(NULL);
#endif

}

void lvgl_power_on_anim_out_cb(void* arc, lv_anim_value_t v)
{
    lv_obj_set_x(arc, v);
}
void lvgl_power_on_anim_out_ready_cb(lv_anim_t* anim)
{

    lvgl_power_on_debug("---------anim out ready---------");


    lvgl_power_on_close();

}

static void lvgl_power_on_anim_out_start(int mode, int time)
{

    lvgl_group_remove_obj(&lvgl_power_on_data.cont_main);

#if LVGL_ANIM_SWITCH

    lvgl_power_on_debug("---------anim out start---------");

    lv_anim_path_init(&lvgl_power_on_data.anim_path_out);
    lv_anim_path_set_cb(&lvgl_power_on_data.anim_path_out, lv_anim_path_ease_in);
    //lv_anim_path_linear线性动画
    //lv_anim_path_step最后一步更改
    //lv_anim_path_ease_in开头很慢
    //lv_anim_path_ease_out最后慢
    //lv_anim_path_ease_in_out在开始和结束时也很慢
    //lv_anim_path_overshoot超出最终值
    //lv_anim_path_bounce从最终值反弹一点（就像撞墙一样）


    lv_anim_init(&lvgl_power_on_data.anim_out);


    lv_anim_set_exec_cb(&lvgl_power_on_data.anim_out, lvgl_power_on_anim_out_cb);
    lv_anim_set_ready_cb(&lvgl_power_on_data.anim_out, lvgl_power_on_anim_out_ready_cb);
    lv_anim_set_values(&lvgl_power_on_data.anim_out, lv_obj_get_x(lvgl_power_on_data.cont_main), lv_obj_get_width(lv_scr_act()));
    lv_anim_set_time(&lvgl_power_on_data.anim_out, 500);
    lv_anim_set_var(&lvgl_power_on_data.anim_out, lvgl_power_on_data.cont_main);

    lv_anim_set_path(&lvgl_power_on_data.anim_out, &lvgl_power_on_data.anim_path_out);
    lv_anim_start(&lvgl_power_on_data.anim_out);

#else


    lvgl_power_on_anim_out_ready_cb(NULL);

#endif

}


void lvgl_power_on_event_cb(struct _lv_obj_t* obj, lv_event_t event)
{
    if (obj == lvgl_power_on_data.cont_main)
    {
        //lvgl_power_on_debug("cb:%d", event);
        switch (event)
        {

        case LV_EVENT_DELETE:

            lvgl_power_on_data.cont_main = NULL;
            lvgl_power_on_debug("delete win");
            break;
        default:
            break;

        }
    }
}


void lv_power_on_gif2_event_cb(struct _lv_obj_t* obj, lv_event_t event)
{

    switch (event)
    {

    case LV_EVENT_LEAVE:

        lvgl_power_on_debug("gif2 over");

        if (obj == lvgl_power_on_data.img_gif2)
        {
            lvgl_power_on_debug("gif2");
            //lv_obj_del(lvgl_power_on_data.img_gif2);

            lvgl_power_on_data.close_flag = true;
            lvgl_power_on_data.close_count = 1;
            lvgl_task_create(&lvgl_power_on_data.close_task, lvgl_power_on_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);
        }

        break;

    case LV_EVENT_DELETE:
        lvgl_power_on_debug("gif2 delete");
        break;

    default:
        break;

    }

}
void lv_power_on_gif1_event_cb(struct _lv_obj_t* obj, lv_event_t event)
{

    switch (event)
    {

    case LV_EVENT_LEAVE:

        lvgl_power_on_debug("gif1 over");
        if (obj == lvgl_power_on_data.img_gif1)
        {
            lvgl_power_on_debug("gif1");

            //lv_gif_restart(lvgl_power_on_data.img_gif1);
            // lv_obj_set_hidden(lvgl_power_on_data.img_gif2, false);

            //lv_obj_del(lvgl_power_on_data.img_gif1);

            lvgl_power_on_data.img_gif2 = lv_gif_create_from_data(lvgl_power_on_data.cont_main, power_on_gif_02);
            lv_obj_set_pos(lvgl_power_on_data.img_gif2, 0, 0);
            lv_obj_set_event_cb(lvgl_power_on_data.img_gif2, lv_power_on_gif2_event_cb);//设置回调函数

            // lvgl_power_on_data.close_flag = true;
            // lvgl_power_on_data.close_count = 1;
            // lvgl_task_create(&lvgl_power_on_data.close_task, lvgl_power_on_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);


        }
        break;
    case LV_EVENT_DELETE:
        lvgl_power_on_debug("gif1 delete");
        break;
    default:
        break;

    }
}

void lvgl_power_on_create(lv_obj_t* parent)
{
    if (lvgl_power_on_data.cont_main == NULL)
    {

        //----创建容器----//
        lvgl_power_on_data.cont_main = lv_cont_create(parent, NULL);
        lv_obj_set_pos(lvgl_power_on_data.cont_main, -(lv_obj_get_width(parent)), 0);
        lv_obj_set_size(lvgl_power_on_data.cont_main, lv_obj_get_width(parent), lv_obj_get_height(parent));

        lv_obj_set_drag_throw(lvgl_power_on_data.cont_main, true);//启用/禁用拖动后是否有惯性移动
        lv_obj_set_drag_parent(lvgl_power_on_data.cont_main, false); //启用 / 禁用父对象可拖动
        lv_obj_set_drag_dir(lvgl_power_on_data.cont_main, LV_DRAG_DIR_HOR);//设置拖动方向
        lv_obj_set_click(lvgl_power_on_data.cont_main, false); //启用 / 禁用可点击
        lv_obj_set_drag(lvgl_power_on_data.cont_main, false);//启用/禁用对象可拖动
        lv_obj_add_style(lvgl_power_on_data.cont_main, LV_OBJ_PART_MAIN, &lvgl_style.cont_no_border);
        lv_obj_set_event_cb(lvgl_power_on_data.cont_main, lvgl_power_on_event_cb);
        //----创建容器----//


        //lvgl_power_on_data.img_gif1 = lv_gif_create_from_file(lvgl_power_on_data.cont_main, "P:/E:/gsm-fm/gsm-fm-simulator/LVGL.Simulator/lvgl_project/image/power_on_gif.gif");
        //lvgl_power_on_data.img_gif1 = lv_gif_create_from_file(lvgl_power_on_data.cont_main, "P:/E:/gsm-fm/65.gif");
        lvgl_power_on_data.img_gif1 = lv_gif_create_from_data(lvgl_power_on_data.cont_main, power_on_gif_01);
        lv_obj_set_pos(lvgl_power_on_data.img_gif1, 0, 0);
        lv_obj_set_event_cb(lvgl_power_on_data.img_gif1, lv_power_on_gif1_event_cb);//设置回调函数

        // lvgl_power_on_data.img_gif2 = lv_gif_create_from_data(lvgl_power_on_data.cont_main, power_on_gif_02);
        // lv_obj_set_pos(lvgl_power_on_data.img_gif2, 0, 0);
        // lv_obj_set_event_cb(lvgl_power_on_data.img_gif2, lv_power_on_gif1_event_cb);//设置回调函数

        //lv_obj_set_hidden(lvgl_power_on_data.img_gif2,true);
        //lvgl_task_create(&lvgl_power_on_data.task,lvgl_power_on_task_cb, 200, LV_TASK_PRIO_HIGH, NULL);

        lvgl_power_on_debug("创建窗口");
    }
    else
    {
        lvgl_power_on_debug("显示窗口");
    }

    //lv_obj_move_background(lvgl_power_on_data.cont_main);
    lvgl_set_obj_show(&lvgl_power_on_data.cont_main);


    lv_obj_set_pos(lvgl_power_on_data.cont_main, 0, 0);

    lvgl_group_add_obj(&lvgl_power_on_data.cont_main);
    lvgl_group_focus_obj(&lvgl_power_on_data.cont_main);


    //lvgl_power_on_anim_in_start(0, 0);
}


void lvgl_power_on_close(void)
{
    lvgl_group_remove_obj(&lvgl_power_on_data.cont_main);

    lvgl_task_delete(&lvgl_power_on_data.task);

    lvgl_obj_clean(&lvgl_power_on_data.cont_main);
    lvgl_obj_del(&lvgl_power_on_data.cont_main);

    lvgl_desktop_create(lv_scr_act());
}





